package com.lagou.utils;

import com.lagou.pojo.Configuration;
import com.lagou.pojo.MappedStatement;
import com.lagou.pojo.ResultMap;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;

/**
 * @Authther: mrwu
 * @date:2021/3/8-03
 * @Description:com.lagou.utils
 */
//单表操作结果处理
public class SimpleReslutSetHander implements ResultSetHandler{
    private  List<Object> results=new ArrayList<>();
    @Override
    public <E> List<E> handerResultSet(ResultSet resultSet, MappedStatement stmt, Configuration config) throws Exception {
      while (resultSet.next()){
          ResultSetMetaData metaData = resultSet.getMetaData();
//          System.out.println(metaData);
          //获取要返回对象的class 全限定名称
          String resultType = stmt.getResultType();
          //怎么获取namesapce 在mapstament 中增加namespace属性
          String resultMapKey = stmt.getNamespace()+resultType;
          ResultMap resultMap= config.getMappedResultMap().get(resultMapKey);
//          System.out.println("获取到resultmap"+resultMap);

          Object o = Class.forName(resultType).newInstance();
          for (int i = 0; i < metaData.getColumnCount(); i++) {
              // 字段名
              String columnName = metaData.getColumnName(i+1);
              // 字段的值
              Object value = resultSet.getObject(columnName);
              //将对应列的值 设置到对象的对应属性
//              System.out.println(columnName+value+"解析类属性");
              Field f = o.getClass().getDeclaredField(columnName);

              f.setAccessible(true);
              f.set(o, value);
          }
          results.add(o);
      }
        return (List<E>)results;
    }
}
